package com.lianrui.core;

import java.text.MessageFormat;
import java.util.ResourceBundle;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;

/**
 * 功能描述：抽象消息工厂类
 *
 * @author LJQ
 *
 * 2015年12月31日 上午9:35:33
 */
public abstract class AbstractMessageFactory  {
	
	private static String DEFAULTMESSAGE = "Not provided for {1} message in the properties!";
	
	private static String DEFAULTPROPERTIES = "Not provided for {1} message properties!";
	
	protected ResourceBundle localBundle;//实例资源
	
	protected AbstractMessageFactory()  {
		super();
		this.localBundle = ResourceBundle.getBundle(this.getClass().getName());
		if (this.localBundle == null) {
			getLogger().error(DEFAULTPROPERTIES, getClass().getName());
			throw new RuntimeException(String.format(DEFAULTPROPERTIES, getClass().getName()));
		}
	}
	
	public abstract Logger getLogger();

	/**
	 * 功能描述：消息的使用方式-获取符串消息
	 * @param code 消息编码
	 * @param params 消息体参数
	 * @return
	 */
	protected String handleMessage(int key, Object... params) {
		return handleMessage(String.valueOf(key), params);
	}
	
	/**
	 * 功能描述：消息的使用方式-获取字符串消息
	 * @param key 消息主键
	 * @param params 消息体参数
	 * @return
	 */
	protected String handleMessage(String key, Object... params) {
		String pattern = this.localBundle.getString(key);
		if (StringUtils.isBlank(pattern)) {
			getLogger().warn(DEFAULTMESSAGE, getClass().getName() + "[" + key + "]");
			return "";
		}
		return MessageFormat.format(pattern, params);
	}
	
	/**
	 * 功能描述：配置的使用方式-获取字符串数组
	 * <pre>
	 * 默认使用 “,” || “;”进行分割
	 * </pre>
	 * @param key 配置主键
	 * @return
	 */
	protected String[] handleMessages(String key) {
		String value = StringUtils.defaultIfBlank(localBundle.getString(key), "");
		return StringUtils.split(value, "[,;]");
	}
	
	/**
	 * 功能描述：配置的使用方式-获取字符串数组
	 * @param key 配置主键
	 * @return
	 */
	protected String[] handleMessages(String key, String separatorChars) {
		String value = StringUtils.defaultIfBlank(localBundle.getString(key), "");
		return StringUtils.split(value, separatorChars);
	}
	
}
